iT邦幫忙

2022 iThome 鐵人賽

DAY 15
1
AI & Data

30天帶你從零基礎到Python爬蟲系列 第 15

[Day15] 檔案相關 & HTML介紹

  • 分享至 

  • xImage
  •  

檔案相關

最一開始要先來了解一下編碼,你輸入的資料電腦會轉換成二進制,像是010101,而操作完再解碼,轉換成你看得懂的資料,而中文的編碼是使用萬國碼(Unicode)裡的 utf-8。

寫入

f = open("a.txt", "w", encoding="utf-8")  # 開檔, "w"是寫入模式
f.write("abcd\n1234")  # \n: 換行 \t: TAB
f.close()  # 關檔

你就會看到旁邊多了一個a.txt的檔案,裡面的內容是

abcd
1234

讀取

f = open("a.txt", "r", encoding="utf-8")  # 開檔
s = f.read()  # 讀檔
print(s)
f.close()

程式會讀取名叫a.txt的檔案,並列印出裡面的內容。

錯誤處理

程式其實有分事前預防跟事後處理,事前預防就是之前有講到過的if-else,讓不同的情況有不同的處理方式,今天要學習的是try-except,其實也非常的簡單而且很常用到。
當發生錯誤的程式碼被執行之後,就會執行第三行except處理錯誤。

try:
可能會發生錯誤的程式碼
except XXXError:
事後補救程式碼

那如果

try:
    line1
	line2
except Error1:  # 如果遇到Error1
	solution1  # 執行這裡的解決方案
	solution2
except Error2:  # 如果遇到Error2
	solution1  # 執行這裡的解決方案
	solution2

這個程式碼有可能遇到三種狀況

  1. 順利執行,也沒什麼好說的,沒有遇到預設的錯誤,也不會執行裡面的solution。
  2. 如果line1發生錯誤,那麼就會先停住,畢竟再執行下去只會錯得更離譜,然後跳到except的地方,這時候又會遇到兩種情況,一種是遇到預設的Error,那麼就是做原先準備好的解決方案;另一種是遇到沒有預想到的Error那就會出現紅字,整個程式停擺。

HTML介紹

另外,在爬蟲的時候會需要看它的網頁原始碼,所以想要成功爬到你要的資料至少得看得懂簡單的html。
HTML格式: 區塊(長方形), 也就是說整個網頁是由一塊一塊的長方形來構成的,大的長方形裡面還有很多小的長方形。如果想要定義區塊一開始要先有<>,裡面放上你要用的格式名字,這個區塊結束是則是</>再加上你的格式名字。

<名字 屬姓名="值" 屬姓名="值"> # start
	文字
</名字> # end
  1. 名字: 決定是什麼東西
    a:超連結、img:圖片、video: 影片
  2. 屬性: 決定不一樣的地方
  • 如果是顯示超連結,後面就是顯示 href="url" # 裡面的url就是要顯示的網址
  • 如果是顯示圖片或是影片,則是要用 src="url"
  1. 內容: 決定顯示什麼文字

但HTML只是定義網頁內容,一個完整的網頁還需要兩個幫手,分別是CSS和JavaScript。CSS是來幫網頁排版,而有些網頁是會動的,像是點什麼東西會出現什麼或是什麼東西消失,總之讓網頁變成動態的,這時就是用JavaScript。這邊也要了解一下網頁的排版,在抓想要的內容時,像是我都想要商品的英文名稱,不可能抓所有的超連結,如果要定位我想要的內容就必須靠排版,你會發現通常這些都會有一致的排版,所以要稍微研究一下CSS可以幫助我們抓取需要的資料。

CSS語法只做一件事情,就是定位元素並且加上排版,而今天講一個最簡單的定位方式。
假設我想要定位所有的超連結(a),並把它的背景都變成紅色。

a{  # 定位到所有名字有a的
	background-color:red;  # 排版背景顏色,定義為紅色
	xxxx:xxxx;  # 還可以制定其他的規則
}

但有時候並不是要所有的超連結,我可能只要圖片的超連結,或是下一頁的超連結。為了分開我需要的東西,在CSS語法中會有兩個特殊的屬性,是自己加上去的,每一個區塊都可以加,來讓劃分想要的資料跟其他區塊。

兩個特殊屬性

  1. 分類
# class="分類1 分類2"
<a class="xyz">

在CSS語法如果你要用class選擇的話要先打一個.

.xyz{
...  # 裡面就可以設定
}
  1. 身分證
    有時候我只要一種特定的連結,像是英文商品的連結,給它一個分類就有點大材小用了,所以可以給它一個id。
# id="值"
<a id="bcdef"

如果用class做選擇要先打.,如果要用id做選擇則是前面加上#

#bcdef{
...  # 裡面就可以設定
}

HTTP代碼

另外這邊先介紹幾個HTTP的代碼,之後爬蟲時會用到的~
2(成功): 200
3(轉址)
4(錯誤):
400(Bad Request)
404(Not Found)


上一篇
[Day14] 像字典一樣查資料 - dictionary
下一篇
[Day16] 利用PyCharm安裝requests函式庫
系列文
30天帶你從零基礎到Python爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
juck30808
iT邦研究生 1 級 ‧ 2022-09-15 00:56:01

從去年追到今年!辛苦了 加油加油!

霓霓 iT邦新手 3 級 ‧ 2022-09-15 00:57:33 檢舉

哇哇太謝謝你啦~我會繼續更新的٩(˃̶͈̀௰˂̶͈́)و

我要留言

立即登入留言